Model-driven engineering and related concepts relate, for example, to the use of formalized models to design, manage, implement, and modify software applications and other processes. Such models provide a formalized abstraction of desired software properties and behaviors, and this abstraction provides, among other benefits, an ability of a designer or other user to understand, explain, create, or implement the software application(s) in a manner that is consistent, logical, and efficient.
Although such model-driven engineering provides many improvements and advantages over earlier and other techniques of software development, it still may be difficult to obtain a desired performance from software developed from model-driven engineering techniques. For example, a developer may wish that a software process may take a specified (maximum) amount of time to complete, or may use a specified maximum of computing resources, or have some other performance demand(s). However, many performance analyses may occur at a late stage of the software development process. Consequently, a developer may find that the desired performance demand(s) remain unmet late in a development process, and may therefore be forced to revisit and re-design development model(s) for the software processes, which may be time-consuming and difficult/costly to implement. Moreover, the performance analysis may be performed by a performance expert, which introduces a potentially complicating element of communication between the performance expert and the software developer.